Users of computer systems often store many types of information that relates to the same entity in various data stores. Each data store is typically well suited for storing a particular type of data and is often associated with an application that allows the user to view and manipulate the data. For example, a user may store information about people the user has met as contacts using Microsoft Outlook. The information often contains each contact's telephone number, street address, email address, and so forth. Other data stores, such as an employee database for a company, may contain information related to the same people. For example, the employee database may contain information about the date a person was hired, what office the person works in, the benefits that the company provides to the person, and so forth. The number of data stores increase as application developers find different uses for information about people or other entities (e.g., companies, offices, and so forth). A user today often uses many data stores with information about related entities, and the user often has to look in many different places (e.g., applications or data stores) to find all of the information related to a particular entity.
There are several common strategies for viewing information associated with a particular entity. The first strategy is to create custom applications for viewing the data in each data store. For example, a user may use Microsoft Outlook or another Personal Information Management (PIM) application to view contact information and use a separate application for viewing sales orders related to his/her business. Another strategy is to use the extensibility provided by an application to extend that application to view multiple types of data. For example, Microsoft Outlook provides an Application Programming Interface (API) for extending the user interface to view many different types of data. While this strategy allows the user to view related information in the same application, the user can still only view one type of information at a time. For example, the user typically would select a folder containing contact information and view that information, and then subsequently select a folder containing sales orders and separately view that information. This strategy does not allow the user to view all of the related data about an entity at the same time.
Another common strategy for viewing information associated with a particular entity is to copy all of the information about that entity from multiple data stores into one data store. A SQL JOIN clause is one way of combining information from two tables within a single data store. However, a JOIN does not work across separate data stores and copies the data into a single temporary table. The copying performed by a JOIN can be time consuming and often makes a JOIN one of the worst performing database operations. As another example, Microsoft Outlook allows applications to add custom fields for contacts that can be displayed with the contacts, and applications can copy information from another data store into Microsoft Outlook's data store as custom fields.
While this strategy allows all of the information to be viewed at the same time, it is not suitable for data that changes over time. This strategy leads to a new problem of keeping the data that is now stored in multiple data stores synchronized. For example, suppose the information from a sales record associated with a person is copied into the contact data store as custom fields associated with that person's contact information. When information about the person changes, both data stores need to be updated. For example, if the person changes his/her address a user may remember to update one data store but not the other. Keeping the two data stores synchronized can be a more difficult problem than the original problem of viewing related data about an entity at the same time. Another problem with this strategy is that the data types of the two data stores may not be the same, making it is difficult to determine into which data type to copy the information.